#include <iostream>
using namespace std;
#include <vector>

namespace wyd
{
    template <size_t N>
    class bitset
    {
    public:

        bitset()
                : _bit(N / 32 + 1, 0)
        {}

        void set(const size_t& val)
        {
            size_t pos = val / 32;
            size_t bit = val % 32;
            _bit[pos] |= (1 << bit);
        }

        void reset(const size_t& val)
        {
            size_t pos = val / 32;
            size_t bit = val % 32;
            _bit[pos] &= ~(1 << bit);
        }

        bool test(const size_t& val)
        {
            size_t pos = val / 32;
            size_t bit = val % 32;
            return _bit[pos] & (1 << bit);
        }

    private:
        vector<int> _bit;
    };


    template<size_t N>
    class bit_two_set
    {
    public:
        void set(const size_t& val)
        {
            // 00 -> 01   0次 -》1次
            if(bit1.test(val) == 0
            && bit2.test(val) == 0)
            {
                bit2.set(val);
            }
            // 01 -> 10   1次 -》 2次
            else if(bit1.test(val) == 0
            && bit2.test(val) != 0)
            {
                bit1.test(val);
                bit2.reset(val);
            }
            else; //10  2次 / 以上

        }
        bool test(const size_t& val)
        {
            // 01 -> 1次
            if(bit1.test(val) == 0
            && bit2.test(val) != 0)
                return true;
            return false;
        }
    private:
        bitset<N> bit1;
        bitset<N> bit2;
    };
}